Java 反射 - 框架设计的灵魂
反射:框架设计的灵魂
- 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
- 反射:将类的各个组成部分封装为其他对象,这就是反射机制
好处:
- 可以在程序运行过程中,操作这些对象。
- 可以解耦,提高程序的可扩展性。
Java 代码在计算机中经历的三个阶段
- Source 源代码阶段:
_.java
被编译成_.class
字节码文件。 - Class 类对象阶段:
\*.class
字节码文件被类加载器加载进内存,并将其封装成 Class 对象(用于在内存中描述字节码文件),Class 对象将原字节码文件中的成员变量抽取出来封装成数组Field[]
,将原字节码文件中的构造函数抽取出来封装成数组Construction[]
,在将成员方法封装成Method[]
。当然 Class 类内不止这三个,还封装了很多,我们常用的就这三个。 - RunTime 运行时阶段:创建对象的过程 new。
获取 Class 对象的方式:
- Class.forName("全类名"):将字节码文件加载进内存,返回 Class 对象
- 多用于配置文件,将类名定义在配置文件中。读取文件,加载类
// 1.class.forName("全类名")
Class cls1 = Class.forName("com.learn.domain.Person");
- 类名.class:通过类名的属性 class 获取
- 多用于参数的传递
// 2. 类名.class
Class cls2 = Person.class;
- 对象.getClass():getClass()方法在 Object 类中定义着。
- 多用于对象的获取字节码的方式
// 3. 对象.getClass()
Person p = new Person();
Class<? extends Person> cls3 = p.getClass();